﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SudokuHelper.Model.Values {
    public interface IValueRelation {
        /// <summary>
        /// Dispatches <paramref name="other"/> with <paramref name="dispatcher"/> 
        /// </summary>
        /// <param name="other">Unknown entity that must be dispatched</param>
        /// <param name="dispatcher"></param>
        void Dispatch(IValueRelation other, ValueRelationDispatcher dispatcher);

        /// <summary>
        /// Dispatches user value <paramref name="userValue"/> with dispatcher
        /// </summary>
        /// <param name="userValue">User value</param>
        /// <param name="dispatcher">Dispatcher</param>
        void Dispatch(UserValue userValue, ValueRelationDispatcher dispatcher);

        /// <summary>
        /// Dispatches calculated value <paramref name="calculatedValue"/> with dispatcher
        /// </summary>
        /// <param name="calculatedValue"></param>
        /// <param name="dispatcher"></param>
        void Dispatch(CalculatedValue calculatedValue, ValueRelationDispatcher dispatcher);

        /// <summary>
        /// Dispatches calculated value <paramref name="range"/> with dispatcher
        /// </summary>
        /// <param name="range"></param>
        /// <param name="dispatcher"></param>
        void Dispatch(ValueRange range, ValueRelationDispatcher dispatcher);
    }
}
